It doesn't make sense to have multiple ShellIdleMonitors, since
each has its own GDK filter function, but they all get the same
events. In preparation for having it accessed from other places
than the message tray, make it a singleton.
https://bugzilla.gnome.org/show_bug.cgi?id=682041
this._idleMonitorWatchId = 0;
this._backFromAway = false;
- this.idleMonitor = new Shell.IdleMonitor();
+ this.idleMonitor = Shell.IdleMonitor.get();
// To simplify the summary item animation code, we pretend
// that there's an invisible SummaryItem to the left of the
monitor->priv->counter = None;
}
+/**
+ * shell_idle_monitor_get:
+ *
+ * Returns: (transfer none): the global #ShellIdleMonitor.
+ */
ShellIdleMonitor *
-shell_idle_monitor_new (void)
+shell_idle_monitor_get (void)
{
- GObject *idle_monitor;
+ static ShellIdleMonitor *idle_monitor;
- idle_monitor = g_object_new (SHELL_TYPE_IDLE_MONITOR,
- NULL);
+ if (G_UNLIKELY (idle_monitor == NULL))
+ idle_monitor = g_object_new (SHELL_TYPE_IDLE_MONITOR,
+ NULL);
- return SHELL_IDLE_MONITOR (idle_monitor);
+ return idle_monitor;
}
static gboolean
GType shell_idle_monitor_get_type (void);
-ShellIdleMonitor * shell_idle_monitor_new (void);
+ShellIdleMonitor * shell_idle_monitor_get (void);
guint shell_idle_monitor_add_watch (ShellIdleMonitor *monitor,
guint interval,